diff options
author | Mike Buland <eichlan@xagasoft.com> | 2012-01-16 22:32:56 -0700 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2012-01-16 22:32:56 -0700 |
commit | 3afa514e11dc16e3a166b39ad411465abd971d8a (patch) | |
tree | 3fc9a9b62682c2905909e749f461034634d78903 | |
parent | 92f50ee62101b67e768b75c9111af3d0258c6ddd (diff) | |
download | stage-3afa514e11dc16e3a166b39ad411465abd971d8a.tar.gz stage-3afa514e11dc16e3a166b39ad411465abd971d8a.tar.bz2 stage-3afa514e11dc16e3a166b39ad411465abd971d8a.tar.xz stage-3afa514e11dc16e3a166b39ad411465abd971d8a.zip |
Lists (arrays) are now properly inedxable.0.02
-rw-r--r-- | src/gamestate.cpp | 4 | ||||
-rw-r--r-- | src/variable.cpp | 20 | ||||
-rw-r--r-- | src/variable.h | 7 | ||||
-rw-r--r-- | test.stage | 20 |
4 files changed, 29 insertions, 22 deletions
diff --git a/src/gamestate.cpp b/src/gamestate.cpp index 285c151..7777b1f 100644 --- a/src/gamestate.cpp +++ b/src/gamestate.cpp | |||
@@ -620,8 +620,8 @@ void GameState::parse( const AstBranch::NodeList &lCode ) | |||
620 | { | 620 | { |
621 | throw Bu::ExceptionBase("You cannot use key:value pairs as iterators in a for each loop iterating over a list."); | 621 | throw Bu::ExceptionBase("You cannot use key:value pairs as iterators in a for each loop iterating over a list."); |
622 | } | 622 | } |
623 | const Variable::VariableList &rList = vIn.getList(); | 623 | const Variable::VariableArray &rList = vIn.getList(); |
624 | for( Variable::VariableList::const_iterator i = | 624 | for( Variable::VariableArray::const_iterator i = |
625 | rList.begin(); i; i++ ) | 625 | rList.begin(); i; i++ ) |
626 | { | 626 | { |
627 | setVariable( vrValue.sName, *i, vrValue.sid ); | 627 | setVariable( vrValue.sName, *i, vrValue.sid ); |
diff --git a/src/variable.cpp b/src/variable.cpp index 68a1778..0c83133 100644 --- a/src/variable.cpp +++ b/src/variable.cpp | |||
@@ -113,7 +113,7 @@ Variable *Variable::getVariablePtr() const | |||
113 | return pValue; | 113 | return pValue; |
114 | } | 114 | } |
115 | 115 | ||
116 | const Variable::VariableList &Variable::getList() const | 116 | const Variable::VariableArray &Variable::getList() const |
117 | { | 117 | { |
118 | return *lValue; | 118 | return *lValue; |
119 | } | 119 | } |
@@ -233,9 +233,12 @@ Variable Variable::to( Type e ) const | |||
233 | 233 | ||
234 | void Variable::insert( const Variable &vKey, const Variable &vValue ) | 234 | void Variable::insert( const Variable &vKey, const Variable &vValue ) |
235 | { | 235 | { |
236 | if( eType != tDictionary ) | 236 | if( eType == tDictionary ) |
237 | throw Bu::ExceptionBase("Insert on non-dictionary."); | 237 | hValue->insert( vKey, vValue ); |
238 | hValue->insert( vKey, vValue ); | 238 | else if( eType == tList ) |
239 | lValue->get( vKey.getInt() ) = vValue; | ||
240 | else | ||
241 | throw Bu::ExceptionBase("Insert on non-dictionary and non-list."); | ||
239 | } | 242 | } |
240 | 243 | ||
241 | bool Variable::has( const Variable &vKey ) | 244 | bool Variable::has( const Variable &vKey ) |
@@ -244,7 +247,8 @@ bool Variable::has( const Variable &vKey ) | |||
244 | return hValue->has( vKey ); | 247 | return hValue->has( vKey ); |
245 | else if( eType == tList ) | 248 | else if( eType == tList ) |
246 | { | 249 | { |
247 | for( VariableList::const_iterator i = lValue->begin(); i; i++ ) | 250 | for( VariableArray::const_iterator i = |
251 | const_cast<const VariableArray *>(lValue)->begin(); i; i++ ) | ||
248 | { | 252 | { |
249 | if( (*i) == vKey ) | 253 | if( (*i) == vKey ) |
250 | return true; | 254 | return true; |
@@ -259,8 +263,10 @@ Variable &Variable::get( const Variable &vKey ) | |||
259 | { | 263 | { |
260 | if( eType == tDictionary ) | 264 | if( eType == tDictionary ) |
261 | return hValue->get( vKey ); | 265 | return hValue->get( vKey ); |
266 | else if( eType == tList ) | ||
267 | return lValue->get( vKey.getInt() ); | ||
262 | else | 268 | else |
263 | throw Bu::ExceptionBase("Insert on non-dictionary."); | 269 | throw Bu::ExceptionBase("Index on non-dictionary and non-list."); |
264 | } | 270 | } |
265 | 271 | ||
266 | Variable &Variable::operator=( const Variable &rhs ) | 272 | Variable &Variable::operator=( const Variable &rhs ) |
@@ -1006,7 +1012,7 @@ void Variable::initType() | |||
1006 | break; | 1012 | break; |
1007 | 1013 | ||
1008 | case tList: | 1014 | case tList: |
1009 | lValue = new VariableList(); | 1015 | lValue = new VariableArray(); |
1010 | break; | 1016 | break; |
1011 | 1017 | ||
1012 | case tDictionary: | 1018 | case tDictionary: |
diff --git a/src/variable.h b/src/variable.h index 2eedcbb..2e84ae1 100644 --- a/src/variable.h +++ b/src/variable.h | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | #include <bu/string.h> | 6 | #include <bu/string.h> |
7 | #include <bu/hash.h> | 7 | #include <bu/hash.h> |
8 | #include <bu/array.h> | ||
8 | 9 | ||
9 | #include "enums.h" | 10 | #include "enums.h" |
10 | 11 | ||
@@ -52,7 +53,7 @@ public: | |||
52 | 53 | ||
53 | Type getType() const { return eType; } | 54 | Type getType() const { return eType; } |
54 | 55 | ||
55 | typedef Bu::List<Variable> VariableList; | 56 | typedef Bu::Array<Variable> VariableArray; |
56 | typedef Bu::Hash<Variable, Variable> VariableHash; | 57 | typedef Bu::Hash<Variable, Variable> VariableHash; |
57 | 58 | ||
58 | bool getBool() const; | 59 | bool getBool() const; |
@@ -61,7 +62,7 @@ public: | |||
61 | Bu::String getString() const; | 62 | Bu::String getString() const; |
62 | VariableRef getVariableRef() const; | 63 | VariableRef getVariableRef() const; |
63 | Variable *getVariablePtr() const; | 64 | Variable *getVariablePtr() const; |
64 | const VariableList &getList() const; | 65 | const VariableArray &getList() const; |
65 | const VariableHash &getHash() const; | 66 | const VariableHash &getHash() const; |
66 | 67 | ||
67 | Variable to( Type e ) const; | 68 | Variable to( Type e ) const; |
@@ -101,7 +102,7 @@ private: | |||
101 | double fValue; | 102 | double fValue; |
102 | bool bValue; | 103 | bool bValue; |
103 | Bu::String *sValue; | 104 | Bu::String *sValue; |
104 | VariableList *lValue; | 105 | VariableArray *lValue; |
105 | VariableHash *hValue; | 106 | VariableHash *hValue; |
106 | VariableRef *rValue; | 107 | VariableRef *rValue; |
107 | Variable *pValue; | 108 | Variable *pValue; |
@@ -17,16 +17,16 @@ situation <<start>> | |||
17 | { | 17 | { |
18 | setup | 18 | setup |
19 | { | 19 | { |
20 | x = 10; | 20 | x = [5, 4, 3]; |
21 | display( x ); | 21 | x = x + [9, 8, 7]; |
22 | x /= 2; | 22 | display( x[4] ); |
23 | display( x ); | 23 | x[4] = 112; |
24 | x *= 4; | 24 | display ('----'); |
25 | display( x ); | 25 | for each i in x do |
26 | x -= 10; | 26 | { |
27 | display( x ); | 27 | display( i ); |
28 | x += 20; | 28 | } |
29 | display( x ); | 29 | |
30 | exit(); | 30 | exit(); |
31 | } | 31 | } |
32 | 32 | ||